home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / GFA basic training.adf / Copper / USER_COPPER II+VARI.LST < prev    next >
File List  |  1989-06-01  |  4KB  |  170 lines

  1. ' User-Copper  II+Variation
  2. ' mit Copper Variation in GFA BASIC
  3. '
  4. @copper_init
  5. '
  6. REPEAT
  7.   @ab_verÄndern
  8.   PRINT "Bunt nicht?",
  9.   EXIT IF MOUSEK
  10.   @auf_verÄndern
  11.   PRINT "Bunt nicht?",
  12. UNTIL MOUSEK
  13. '
  14. @user_copper_aus
  15. EDIT
  16. '
  17. > PROCEDURE copper_init
  18.   @usercop_lÄnge
  19.   @memory_copperbereit
  20.   @user_copper_an
  21. RETURN
  22. > PROCEDURE usercop_lÄnge
  23.   DO
  24.     READ x%
  25.     EXIT IF x%=&HFFFF
  26.     INC anz&    ! Anz Worte
  27.   LOOP
  28.   MUL anz&,2    ! Anz Bytes
  29.   RESTORE
  30. RETURN
  31. > PROCEDURE datas
  32.   DATA $0180,$0000
  33.   DATA $7701,$fffe
  34.   DATA $0180,$0f00
  35.   DATA $7801,$fffe
  36.   DATA $0180,$0f10
  37.   DATA $7901,$fffe
  38.   DATA $0180,$0f20
  39.   DATA $7a01,$fffe
  40.   DATA $0180,$0f40
  41.   DATA $7b01,$fffe
  42.   DATA $0180,$0f60
  43.   DATA $7c01,$fffe
  44.   DATA $0180,$0f70
  45.   DATA $7d01,$fffe
  46.   DATA $0180,$0f80
  47.   DATA $7e01,$fffe
  48.   DATA $0180,$0f90
  49.   DATA $7f01,$fffe
  50.   DATA $0180,$0fa0
  51.   DATA $8001,$fffe
  52.   DATA $0180,$0fb0
  53.   DATA $8101,$fffe
  54.   DATA $0180,$0fc0
  55.   DATA $8201,$fffe
  56.   DATA $0180,$0fd0
  57.   DATA $8301,$fffe
  58.   DATA $0180,$0fe0
  59.   DATA $8401,$fffe
  60.   DATA $0180,$0ff0
  61.   DATA $8501,$fffe
  62.   DATA $0180,$0ff1
  63.   DATA $8601,$fffe
  64.   DATA $0180,$0ff2
  65.   DATA $8701,$fffe
  66.   DATA $0180,$0ff3
  67.   DATA $8801,$fffe
  68.   DATA $0180,$0ff4
  69.   DATA $8901,$fffe
  70.   DATA $0180,$0ff5
  71.   DATA $8a01,$fffe
  72.   DATA $0180,$0ef5
  73.   DATA $8b01,$fffe
  74.   DATA $0180,$0df5
  75.   DATA $8c01,$fffe
  76.   DATA $0180,$0cf5
  77.   DATA $8d01,$fffe
  78.   DATA $0180,$0bf4
  79.   DATA $8e01,$fffe
  80.   DATA $0180,$0af3
  81.   DATA $8f01,$fffe
  82.   DATA $0180,$09f2
  83.   DATA $9001,$fffe
  84.   DATA $0180,$08f1
  85.   DATA $9101,$fffe
  86.   DATA $0180,$07f2
  87.   DATA $9201,$fffe
  88.   DATA $0180,$06e3
  89.   DATA $9301,$fffe
  90.   DATA $0180,$06d3
  91.   DATA $9401,$fffe
  92.   DATA $0180,$06c3
  93.   DATA $9501,$fffe
  94.   DATA $0180,$06b3
  95.   DATA $9601,$fffe
  96.   DATA $0180,$06a3
  97.   DATA $9801,$fffe
  98.   DATA $0180,$0693
  99.   DATA $9901,$fffe
  100.   DATA $0180,$0683
  101.   DATA $9a01,$fffe
  102.   DATA $0180,$0673
  103.   DATA $9b01,$fffe
  104.   DATA $0180,$0664
  105.   DATA $9c01,$fffe
  106.   DATA $0180,$0655
  107.   DATA $9d01,$fffe
  108.   DATA $0180,$0555
  109.   DATA $9e01,$fffe
  110.   DATA $0180,$0546
  111.   DATA $9f01,$fffe
  112.   DATA $0180,$0
  113.   DATA $ffff
  114. RETURN
  115. > PROCEDURE user_copper_aus
  116.   VSYNC                        ! Warten, damit Copper nicht stoert
  117.   LONG{_GfxBase+50}=(altcop%)  ! Vector zurueckschreiben (Alte Datenliste)
  118.   x%=MFREE(u_copadr%,mem&)     ! User-Coplistspeicher Frei!
  119. RETURN
  120. PROCEDURE memory_copperbereit
  121.   mem&=76+anz&               ! 76 Bytes werden noch vom System uebernommen
  122.   u_copadr%=MALLOC(mem&,2)   ! Chipmemory belegen in errechneter Größe
  123.   neu_copadr%=u_copadr%      ! Zweimal speichern (Zähler und Übergabe)
  124.   '
  125.   altcop%=LPEEK(_GfxBase+50) ! Copper-Automatik-Vector relativ zu GFXBASE retten
  126.   startcop%=altcop%+84       ! Anfang der Daten die uebernommen werden müssen
  127.   '        Startliste des Systems Kopieren
  128.   BMOVE startcop%,neu_copadr%,60
  129.   '        Unsere Liste
  130.   CLR zeiger&,x%
  131.   RESTORE
  132.   '        Unseren Adress-Zeiger erhoehen
  133.   ADD neu_copadr%,60         ! 60 sind schon drin, darum um 60 erhöhen
  134.   '
  135.   counter_oben%=neu_copadr%+4    ! Oberen Zeiger auf Bewegungs-Position setzen.
  136.   '                                = Erster Copper WAIT
  137.   DO
  138.     READ x%
  139.     EXIT IF x%=&HFFFF
  140.     DPOKE neu_copadr%+zeiger&,x%
  141.     ADD zeiger&,2
  142.   LOOP
  143.   '        End Liste des Systems kopieren
  144.   ADD startcop%,60
  145.   ADD neu_copadr%,anz&
  146.   counter_unten%=neu_copadr%-8   ! Unteren Zeiger auf zweite Bewegungsposition setzen
  147.   '                                = Letzter Copper-Wait
  148.   BMOVE startcop%,neu_copadr%,16
  149. RETURN
  150. PROCEDURE ab_verÄndern
  151.   ' Counter_oben = 1. WAIT-Adresse der Liste
  152.   ' Counter_unten = Letzte WAIT-Adresse der Liste
  153.   FOR i|=0 TO 42
  154.     VSYNC
  155.     CARD{counter_oben%}=(&H7501+i|*&H100)       ! Nur Wort verändern
  156.     CARD{counter_unten%}=(&H9F01+i|*&H100)
  157.   NEXT i|
  158. RETURN
  159. PROCEDURE auf_verÄndern
  160.   FOR i|=42 DOWNTO 0
  161.     VSYNC
  162.     CARD{counter_oben%}=(&H7501+i|*&H100)       ! Nur Wort verändern
  163.     CARD{counter_unten%}=(&H9F01+i|*&H100)
  164.   NEXT i|
  165. RETURN
  166. > PROCEDURE user_copper_an
  167.   VSYNC                         ! Warten auf Vblank, damit Copper nicht ausliest
  168.   LONG{_GfxBase+50}=(u_copadr%) ! (Unsere) Adresse in den Auto-Vector schreiben
  169. RETURN
  170.